001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Apr 1, 2003
005     * Time: 8:03:20 PM
006     */
007    
008    package EVolve.util.equators;
009    
010    import EVolve.util.HelperFuncs;
011    
012    import java.util.*;
013    
014    public class UnorderedUnlimitedSet extends Set{
015        private HashMap data;
016    
017        public UnorderedUnlimitedSet() {
018            data = new HashMap();
019        }
020    
021        public int size() {
022            return data.size();
023        }
024    
025        public long getElement(int i) {
026            return ((Long)data.get(new Integer(i))).longValue();
027        }
028    
029        public boolean setFull() {
030            return false;
031        }
032    
033        public long getEntityId(int i) {
034            return getElement(i);
035        }
036    
037        public void addElement(long id) {
038            if (!data.containsValue(new Long(id)))
039                data.put(new Integer(data.size()),new Long(id));
040        }
041    
042        public Set newSet() {
043            return new UnorderedUnlimitedSet();
044        }
045    
046        public Set union(Set set) {
047            Set result = new UnorderedUnlimitedSet();
048            HashMap setData[] = new HashMap[2];
049    
050            setData[0] = data;
051            setData[1] = ((UnorderedUnlimitedSet)set).data;
052    
053            for (int i=0; i<setData.length; i++) {
054                Iterator it = setData[i].keySet().iterator();
055                while (it.hasNext()) {
056                    result.addElement(((Long)setData[i].get(it.next())).longValue());
057                }
058            }
059    
060            return result;
061        }
062    
063        public Set intersection(Set set) {
064            HashMap otherData = ((UnorderedUnlimitedSet)set).data;
065            Set result = new UnorderedUnlimitedSet();
066    
067            Iterator it = data.keySet().iterator();
068            while (it.hasNext()) {
069                Long value = (Long)data.get(it.next());
070                if (otherData.containsValue(value))
071                    result.addElement(value.longValue());
072            }
073    
074            return result;
075        }
076    
077        public boolean exist(long element) {
078            return data.containsValue(new Long(element));
079        }
080    
081        public boolean equals(Set set, float percent) {
082            Set union = union(set);
083            Set intersection = intersection(set);
084    
085            return ((float)intersection.size()/(float)union.size()) >= percent;
086    
087        }
088    
089        public float getOrderedMatch(UnorderedUnlimitedSet next) {
090            HashMap source = data, target = next.data;
091            Iterator it = source.keySet().iterator();
092            int accum = 0, count = 0;
093            float result;
094    
095            while (it.hasNext()) {
096                Long mappedId = (Long)source.get(it.next());
097                //if (target.containsValue(mappedId)) continue;
098                accum += mappedId.intValue();
099                count++;
100            }
101            result = (float)accum/(float)count;
102    
103            accum = count = 0;
104            it = target.keySet().iterator();
105            while (it.hasNext()) {
106                Long mappedId = (Long)target.get(it.next());
107                //if (source.containsValue(mappedId)) continue;
108                accum += mappedId.intValue();
109                count++;
110            }
111            result = Math.abs(result - (float)accum/(float)count);
112    
113            return result;
114        }
115    
116        public long getMaxEntityId() {
117            int maxId = 0;
118    
119            Iterator it = data.keySet().iterator();
120            while (it.hasNext()) {
121                Long mappedId = (Long)data.get(it.next());
122                if (maxId < mappedId.intValue())
123                    maxId = mappedId.intValue();
124            }
125            return maxId;
126        }
127    
128        public long getHashValue() {
129            return 0;
130        }
131    
132        public Object clone() {
133            UnorderedUnlimitedSet o = (UnorderedUnlimitedSet)super.clone();
134            o.data = HelperFuncs.cloneHashMap(data);
135    
136            return o;
137        }
138    }